Deep and Structured(2017) - L1 Notes

Contents

  1. 1. 前言
  2. 2. Basic Structure: Recurrent Structure
  3. 3. Recurrent Neural Network
    1. 3.1. LSTM
    2. 3.2. GRU
  4. 4. 其他

前言

2017 的課程 http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS17.html

有些部分似乎沒拍成影片,可惜了~

Basic Structure: Recurrent Structure

簡單來說就是此 network 重複使用同樣的 function 一次又一次。

Recurrent Neural Network

$f$ 有兩個輸入和兩個輸出,皆為 vector。
且產生出來的 $h^{\prime}$ 要與 $h$ 有一樣的維度,這樣才能再做為下一個 $f$ 的輸入。

我們不需要管 $x$ 有多少,都只需要一個 $f$ 。

1-16

在處理 sequence 時使用 RNN 的好處是,我們只需要比較少的參數來處理,所以比較不容易 overfitting ,但也比較難訓練,但訓練好後在 testing data 上的成果往往比較好。

如果是用 feed forward 來處理 sequence 的話,儘管在 training data 上有不錯的結果,但很有可能因為參數太多而導致 overfitting 。

  • Deep RNN:

為了要讓不同 $f$ 可以接在一起,這邊 $f_2$ 的輸入和 $f_1$ 的輸出維度要一樣。

1-17

  • Bidirectional RNN:

$f_1$ 處理 feedforward , $f_2$ 處理 backward , $f_3$ 負責將它們兩接再一起。

1-18

  • Pyramidal RNN

(略)

  • Naive RNN

一個常見的 $f$ ,先算出 $h^\prime$ ,再用 $h^\prime$ 去求出 $y$ 。

1-20

  • LSTM

LSTM

也是一種 RNN。

複雜複雜的傢伙 LSTM wiki

1-21

這裡與 Naive 的稍作比對,原本在 Naive 中用來銜接兩個 $f$ 的是 $h$ 這個向量。
在 LSTM 中則是有兩個 $c,h$,而這兩個向量分別有不同的特性:

  • c: c 之間的關係可能是前一個 上了某些東西產生出下一個 => 改變較慢
  • h: h 之間關係複雜,前後兩個會非常不同 => 改變較快

如此一來訊息在傳遞時有兩條路徑可走。
c 可以記得 較久 以前的資訊,h 則是 較短 期的。

計算上簡單來看:

1-22

(投影片中顏色一樣的就代表是一樣的東西)

從第一個式子來看,就是把 $x^t$ 和 $h^{t-1}$ 接在一起成一個更長的向量,跟 $w$ matrix 相乘,再代進 activation function ,得到 $z$。
(影片中好像有解釋這個的意思,可惜是在我看不到的黑板上…)

其他的就是乘上不同的 $w$ matrix 和代進 activation function ,得到不同的 $z$

1-23

接著來看 $c$ ,有時候我們會把它也接在 $x,h$ 下,這樣稱為 peephole。(我也不知道是甚麼意思…)
($w$ 也隨之變寬,通常會使 $c$ 對應到的部分是 diagonal)

1-24

下一項的 $c,h$ 可以從圖中清楚的看出是如何運算的,可以依序算出 $c^t$ => $h^t$ => $y^t$

$\odot$ : element-wise operator。
tanh : Hyperbolic tangent function

$y^t$ 的部分需要再和另一個 matrix $W^\prime$ 相乘,並代入 sigmoid function。
(圖中做矩陣乘法的用 粗箭頭 來表示)

再來是各個 $z$ 所代表的意義:

  • $z^f$: forget gate ,用來決定 $c^{t-1}$ 這個記憶能不能傳到下個時間點
  • $z^i$: input gate ,用來決定 $z$(淺綠色方塊) 的資訊能不能流進去
  • $z^o$: output gate ,用來決定區塊記憶中的 input 是否能輸出 (這個取自 wiki)

如同前面 RNN 一樣,我們繼續連接它,function 參數一樣只是拿出來反覆使用。每一次完整的輸入輸出都是一個 block。

1-25

另外在 LSTM 中各 gate 的重要性大致上是: forget > input > output
(在不同例子可能不同)

GRU

LSTM 的一種版本,它並沒有明確的區分長短期,所以外觀看起來跟 Naive 一樣,但它內部的行為很像 LSTM 。

1-26

我們將 $h^{t-1},x^t$ 並在一起後,乘上一個矩陣並代進 activation function (粗箭頭),這邊是使用 sigmoid function ,使它的值介於 0,1 ,稱為 reset gate

同樣的 $h^{t-1},x^t$ ,再乘上另外一個矩陣並代進 function,得到的是 update gate

接著把 $r$ 和 $h^{t-1}$ 做 element-wise 得到的向量和 $x^t$ 合併之後,乘上一個矩陣(黃粗箭頭),就得到 $h^\prime$ 。

其餘就看圖吧!
p.s. 中間有個 1- 的部分是指 $1-z$ 和 $h^\prime$ 做 element-wise 。
p.s. 上方數學式子修正為 $h^t = z\odot h^{t-1} +(1-z)\odot h^\prime$

而使用 GRU 的其中一個好處是它運算量較少,可以看到它跟原本 LSTM 相比起來矩陣的部分較少。(黃色的為一個)
也就代表了參數較少,比較不會 overfitting 。
(這邊影片中是說,這樣的講法是有點語帶保留,要再討論的!)

其他

利用 phoneme classification 來當例子測試各種方法,看哪種結果比較好

1-29

(注意表中左上角部分的符號)